// 当前歌词的高度
let lyricHeight = 0

const lrcStr = '暂无歌词'
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    isLyricShow: {
      type: Boolean,
      value: false,
    },
    lyric: {
      type: String,
    }
  },

  // 监听数据的改变
  observers: {
    lyric(lrc) {
      console.log(lrc)
      if (lrc == '') {
        console.log('暂无歌词')
        this.setData({
          lrcList: [
            {
              lrc: lrcStr,
              time: 0,
            }
          ],
          nowLyricIndex: -1
        })
      } else {
        // console.log(lrc)
        this._parseLyric(lrc)
      }
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    lrcList: [],
    // 当前歌词索引
    nowLyricIndex: 0,
    // 滚动条滚动的高度
    scrollTop: 0
  },

  // 生命周期函数
  lifetimes: {
    ready() {
      // 获取设备信息
      wx.getSystemInfo({
        success(res) {
          console.log(res)
          if (res) {
            // 1rpx的大小
            lyricHeight = res.screenWidth / 750 * 64
          }
        },
      })
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 解析歌词
    _parseLyric(sLyric) {
      // 数组     切割字符串 换行
      let line = sLyric.split('\n')
      let _lrcList = []
      // 逐行解析
      line.forEach((elem) => {
        // match匹配 正则表达式 \d表示数字 {2,}表示两个或多个
        let time = elem.match(/\[(\d{2,}):(\d{2})(?:\.(\d{2,3}))?]/g)
        if(time != null) {
          // 歌词
          let lrc = elem.split(time)[1]
          // 时间数组
          let timeReg = time[0].match(/(\d{2,}):(\d{2})(?:\.(\d{2,3}))?/)
          // 将时间转换成秒
          let timeToSeconds = parseInt(timeReg[1]) * 60 + parseInt(timeReg[2]) + parseInt(timeReg[3]) / 1000
          _lrcList.push({
            lrc,
            time: timeToSeconds,
          })          
        }
      })
      this.setData({
        lrcList: _lrcList
      })
    },
    update(currentTime) {
      // 歌词与时间联动
      console.log(currentTime)
      let lrcList = this.data.lrcList
      // 没有歌词
      if(lrcList.length == 0) {
        this.setData({
          lrcList: [
            {
              lrc: lrcStr,
              time: 0,
            }
          ],
          nowLyricIndex: -1
        })
      }else {
        if (currentTime > lrcList[lrcList.length - 1].time) {
          if (this.data.nowLyricIndex != -1) {
            this.setData({
              nowLyricIndex: -1,
              scrollTop: lrcList.length * lyricHeight
            })
          }
        }
        for (let i = 0, len = lrcList.length; i < len; i++) {
          if (currentTime <= lrcList[i].time) {
            // 歌词高亮显示
            // console.log('歌词高亮显示')
            this.setData({
              nowLyricIndex: i - 1,
              scrollTop: (i - 1) * lyricHeight
            })
            break
          }
        }
      }
      
    }
  }
})
